package com.example.baselib.utils

import android.Manifest
import android.Manifest.permission
import android.Manifest.permission.READ_PHONE_STATE
import android.os.Build
import androidx.core.app.ActivityCompat
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat
import android.app.Activity
import androidx.annotation.NonNull
import android.annotation.TargetApi
import com.example.baselib.dialog.MsgDialog


/**
 * Author: sxygsj
 * Date: 2020/4/15 15:08
 * Description: 应用动态权限设置工具类
 * History:
 * <author> <time> <version> <desc>
 * 作者姓名 修改时间 版本号 描述
 */
object PermissionsUtils {
    /**
     * 获取系统状态的权限
     */
    val PHONE_STATE_PERMISSIONS = arrayOf<String>(Manifest.permission.READ_PHONE_STATE)
    /** 读写存储权限  */
    val WRITE_EXTERNAL_STORAGE_PERMISSIONS = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE)
    /**
     * 检查是否需要动态获取权限
     *
     * @return true FALSE
     */
    fun isRequestPermission(): Boolean {
        // 版本判断。当手机系统大于 23 时，才有必要去判断权限是否获取
        return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
    }

    // 开始提交请求权限
    fun startRequestPermission(
        activity: Activity,
        permissions: Array<String>,
        requestCode: Int
    ): Boolean {
        // 检查该权限是否已经获取
        val i = ContextCompat.checkSelfPermission(activity, permissions[0])
        // 权限是否已经 授权 GRANTED---授权  DINIED---拒绝
        if (i != PackageManager.PERMISSION_GRANTED) {
            // 如果没有授予该权限，就去提示用户请求
            ActivityCompat.requestPermissions(activity, permissions, requestCode)
            return false
        } else {
            return true
        }
    }
    @TargetApi(23)
    fun requestPermissionResult(
        activity: Activity,
        permissions: Array<out String>,
        grantResults: IntArray
    ): Int {
        if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
            // 判断用户是否 点击了不再提醒。(检测该权限是否还可以申请)
            val result = activity.shouldShowRequestPermissionRationale(permissions[0])
            if (!result) {
                // 用户还是想用我的 APP 的
                // 提示用户去应用设置界面手动开启权限
                return -2

            }
        } else {
            return 0
        }
        return -1
    }
}